from qturboframe.lib.webdriver.exceptions import SeleniumError
from qturboframe.lib.report.log import logger
from qturboframe.public_ui.h_ui.edit_grid import EditGrid as HuiEditGrid

class EditGrid(HuiEditGrid):
    '''
    对操作员中心特有的可编辑表格操作进行封装
    '''

    def edit_dic(self, table_dict):
        '''
        修改字典项表格，独有表格封装

        :Args:
         - table_dict: 单元格列名和单元格内容，字典类型，例：{列名1:内容1, 列名2:内容2}

        :Example:
         - 例: editgrid.edit_dic({'姓名':'admin, manager'})
        '''
        row_table_dic = dict()
        for list_name in ['字典项编号', '租户编码']:
            if table_dict.get(list_name) != '-':
                row_table_dic[list_name] = table_dict[list_name]
                table_dict.pop(list_name)
        if row_table_dic: 
            logger.info('开始表格行号查询')
            # 获取列名列表
            title_list = self.head_table.get_title_list()
            logger.debug('表格显示列名：' + str(title_list))
            row = self._get_row_index(title_list, row_table_dic)
            # 填入修改数据
            self.auto_fill(table_dict, row=row)
        else:
            raise SeleniumError("查询条件为空，无法查询到对应数据！")
        
    def check_cells_exist(self, table_dict, turn_page=False):
        '''
        检查单元格是否存在

        :Args:
         - table_dict: 一组单元格列名和单元格内容，字典类型，例：{列名1:'内容1,内容2'}
         - turn_page: 是否自动翻页，默认关闭自动翻页查找功能

        :Example:
         - 例: editgrid.check_cells_exist({'姓名':'admin, manager'}, True)
        '''
        # 表格数据检查
        key_list = list(table_dict.keys())
        for key in key_list:
            if table_dict.get(key) == '-':
                table_dict.pop(key)
        if not table_dict:
            raise AttributeError('表格检查条件为空！')
        if turn_page:
            if self._page.exist():
                self._page.to_first()
        # 获取列名列表
        title_list = self.head_table.get_title_list()
        logger.debug('表格显示列名：' + str(title_list))
        # row = self._get_row_index(title_list, table_dict, turn_page)
        # 查找单元格
        search_value_list = table_dict.get(list(table_dict.keys())[0]).split(',')
        for value in search_value_list:
            search_dict = {list(table_dict.keys())[0]:value}
            row = self._get_row_index(title_list, search_dict, turn_page)
            if row:
                logger.info('列名为{}，内容为{}的单元格存在，检查通过！'.format(
                    list(table_dict.keys())[0], value))
            else:
                raise SeleniumError('列名为{}，内容为{}的单元格不存在，检查不通过！'.format(
                    list(table_dict.keys())[0], value))